package PreHr

import "C"
import (
	"ali-hr/Services/PreHr"
	"ali-hr/Util"
	"github.com/gin-gonic/gin"
	"github.com/gookit/goutil/dump"
	"strconv"
)

/**
 * Created by Goland
 * User: wkk alisleepy@hotmail.com
 * Time: 2021/12/21 - 00:39
 * Desc: <预入职系统员工管理controller>
 */

// PreStaffList 预入职人员列表
func PreStaffList(c *gin.Context) {
	// 当前页和当前页的条数
	pageIndex, _ := strconv.Atoi(c.Query("pageIndex"))
	pageSize, _ := strconv.Atoi(c.Query("pageSize"))

	// 搜索条件
	filters := make(map[string]any)
	name := c.Query("name")
	departmentId, _ := strconv.Atoi(c.Query("department_id"))
	mobile := c.Query("mobile")
	status := c.Query("status")
	joinDate := c.Query("join_date")
	filters["name"] = name
	filters["department_id"] = departmentId
	filters["mobile"] = mobile
	filters["join_date"] = joinDate
	filters["status"] = status

	var result = make(map[string]interface{})
	data, total, err := PreHr.PreStaffList(pageIndex, pageSize, filters, false)
	if err != nil {
		Util.FailWithMessage("获取预入职员工信息失败", c)
		return
	}

	result["data"] = data
	result["total"] = total
	Util.OkWithData(result, c)
}

// PreStaffInfo 查看预入职人员信息，连表 预入职人员资料信息
func PreStaffInfo(c *gin.Context) {
	id, _ := strconv.Atoi(c.Query("id"))
	idCard := c.Query("id_card")
	if Util.Debug() {
		dump.P("入参信息：", id, idCard)
	}

	// 定义返回值
	var result = make(map[string]interface{})

	// 搜索条件
	filters := make(map[string]any)
	filters["id"] = id
	filters["id_card"] = idCard
	if Util.Debug() {
		dump.P(filters["id"])
		dump.P(filters["id_card"])
	}

	data, err := PreHr.GetPreStaff(filters)
	if err != nil {
		Util.FailWithMessage("获取预入职员工信息失败", c)
		return
	}
	result["data"] = data
	Util.OkWithData(result, c)
}

// UpdatePreStaff 修改预入职人员信息，包括修改预入职人员资料信息
func UpdatePreStaff(c *gin.Context) {

}

// ExportHrStaff 导出预入职人员列表
func ExportHrStaff(c *gin.Context) {

}

// Entry 确定入职操作
func Entry(c *gin.Context) {
	// 员工入职操作
	// 1、使用update操作更新预入职员工表

	// 2、自定义钩子，再更新预入职员工信息后，执行一下操作
	// a、员工表创建员工信息
	// b、自定义的其他操作：比如开通微信账号、钉钉账号等、分配工作邮箱等

}

// CancelEntry 取消入职操作
func CancelEntry(c *gin.Context) {
	// 取消员工操作，更新预入职员工信息为"取消入职"，并填写取消入职原因
	id := c.Query("id")
	cancelReason := c.Query("cancel_reason")

	postData := make(map[string]any)
	postData["id"] = id
	postData["cancel_reason"] = cancelReason

	// 验证参数是否必填
	ok, msg := Util.CheckParamIsNull(postData, []string{"id", "cancel_reason"})
	if !ok {
		Util.FailWithMessage(msg, c)
		return
	}

	// 执行取消入职操作
	err, msg := PreHr.CancelEntry(postData)
	if err != nil {
		Util.FailWithMessage(msg, c)
		return
	}

	Util.OkWithMessage("取消入职成功", c)
	return
}
